<?php

namespace app\admin\controller;

use think\Controller;
use think\Session;
use think\Db;
use think\Validate;

use think\File;
use think\Request;

use app\admin\controller\Base;

class Course extends Base
{

	//显示所有的课程分类
	public function index()
	{
		$list = Db::name('course')->paginate(5);
		// dump($list);die;
		return view('course/index',[
					'title'=>'课程管理',
					'content'=>'课程列表',
					'data'=>$list
				]);
	}

	//加载添加课程页面的三级联动数据
	public function sanji($pid='')
	{
		$res =  Db::name('category')->where('pid',$pid)->select();
		// dump($res);die;
		return $res;
	}

	//加载添加课程页面
	public function course_add()
	{
		//所属分类列表
		$first =  json_encode(Db::name('category')->where('pid','0')->select());
		// dump($first);die;
		return view('course/course_add',[
					'title'=>'课程管理',
					'content'=>'添加课程',
					'first'=>$first
					]);
	}

	//更改课程状态
	public function course_dis($id,$sta)
	{
		$sta == 1? $sta=0:$sta=1;

        $data['display'] = $sta;
        Db::startTrans();
        try{
            // 改变用户状态
            $res1 = Db::name('course')
                ->where('id',$id)
                ->update($data);
            Db::commit();
            $this->success('更改成功');
            
        }catch(Exception $exception){
            Db::rollback();
            $this->error('更改失败');
        }
	}
	//执行添加课程
	public function do_course()
	{
		$data = input('post.');
		
		if(isset($data['categorythree'])){
			unset($data['categoryone']);
			unset($data['categorytwo']);
			$data['categoryid'] = $data['categorythree'];
			unset($data['categorythree']);
		}else{
			if(isset($data['categorytwo'])){
				unset($data['categoryone']);
				$data['categoryid'] = $data['categorytwo'];
				unset($data['categorytwo']);
			}else{
				$data['categoryid'] = $data['categoryone'];
				unset($data['categoryone']);
			}
		}
		// dump($data);die;
		$namedup = Db::name('course')->where('name',$data['name'])->select();
        if(!empty($namedup)){
             $this->error('不能重复添加','/Course/');
        }

        $rule =[
                'name'   => 'require|regex:/^[\x{4e00}-\x{9fa5}]{2,50}$/u',
                'description' => 'require|regex:/^[\x{4e00}-\x{9fa5}]{2,100}$/u',
                'display'=>'require|boolean',
                'price'=>'require|number',
                'categoryid' =>'require'
                ];

        $message  =[
            'name.require' => '课程名必须填',
            'name.regex'     => '课程名为2-50位中文汉字',
            'description.require' => '描述必须填',
            'description.regex'     => '描述为2-100位中文汉字',
            'display.require'   => '状态必须填',
            'display.boolean'=>'状态为显示或者隐藏',
            'price.require'  => '价格必填',
            'price.number'  => '价格为数字',
            'categoryid.require'  => '分类id必填',
            ];
        
        $validate = new Validate($rule,$message);
        $result   = $validate->check($data);

        if(!$result){
            $this->error($validate->getError());
        }else{
            $res = Db::name('course')->insert($data);
        }
		
		if($res){
			$this->success('添加课程成功','/Course/');
		}else{
			$this->error('添加课程失败');
		}

	} 

	//删除某课程要确保其下没有单元或者小节课
	public function del_course($id)
	{
		$res1 = Db::name('courseunite')->where('courseid',$id)->select();
		$res2 = Db::name('coursepicture')->where('courseid',$id)->select();
		// dump(empty($res));die;
		if(empty($res1)&&empty($res2)){
			
			
		    $result = Db::name('course')->where('id',$id)->delete();
		    if($result){
		    	$this->success('删除成功');
		    }else{
		    	$this->error('删除失败，请重试');
		    }
			

		}else{
			$this->error('请先删除该课下的单元或者图片');
		}
	}

	public function del_picture($id)
	{
		 $result = Db::name('coursepicture')->where('id',$id)->delete();
		    if($result){
		    	$this->success('删除成功');
		    }else{
		    	$this->error('删除失败，请重试');
		    }
	}

	public function change_pic_status($id,$cover)
	{	
		if($cover==1){
			$arr = ['cover'=>0];
			$res = Db::name('coursepicture')->where('id',$id)->update($arr);
		}else{
			$arr = ['cover'=>1];
			$res = Db::name('coursepicture')->where('id',$id)->update($arr);
		}

		if($res){
			$this->success('更改成功');
		}else{
		    $this->error('更改失败，请重试');
		}
	}



	//加载添加单元/图片页面
	public function unite_add($id='')
	{
		// dump($id);
		$courseid = $id;

		//单元列表
		$list = Db::name('courseunite')->where('pid','0')->select();
		return view('course/unite_add',[
				'title'=>'课程管理',
				'picture'=>'给该课程添加图片',
				'unite'=>'给该课程添加单元',
				'courseid'=>$courseid,
				'list'=>$list
			]);
	}

	//执行添加图片
	public function picture_do()
	{
		// $data = input("post.");
		//获取表单上传文件 例如上传了001.jpg 
		$file = request()->file('pic');  
        // $data = input('post.');
		// dump($file,$data);die;
		// 移动到框架应用根目录/public/uploads/ 目录下
		$info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
		if($info){
			// 成功上传后 获取上传信息  输出 jpg
			// echo $info->getExtension();
			// 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
			$address = $info->getSaveName();
			// 输出 42a79759f284b767dfcb2a0197904287.jpg
			// echo $info->getFilename(); 
		}else{
			//上传失败获取错误信息
			echo $file->getError();
		}

		$data = input('post.');
		$data['address'] = str_replace('\\','/',$address);
		// dump($data);
		$res = Db::name('coursepicture')->insert($data);
		if($res){
			$this->success('上传图片成功','/Course/');
		}else{
			$this->error('上传图片失败');
		}

	}

	//执行添加单元
	public function unite_do()
	{
		$data = input('post.');
		// dump($data);die;
		//验证数据
		$rule =[
                'name'   => 'require|regex:/^[\x{4e00}-\x{9fa5}a-zA-Z0-9]{2,16}$/u',
                'courseid'=>'require|number',
                'pid'=>'require|number',
                'level' =>'require|regex:/^[\x{4e00}-\x{9fa5}a-zA-Z0-9]{2,7}$/u',
                'display'=>'require|boolean'
                ];

        $message  =[
            'name.require' => '单元名必须填',
            'name.regex'     => '单元名为2-16位中文汉字或者字母数字',
            'display.require'   => '状态必须填',
            'display.boolean'=>'状态为显示或者隐藏',
            'level.require' => '级别必须填',
            'level.regex'     => '级别为2-5位中文汉字或者字母数字',
            'pid.require'  => '父级分类ID必填',
            'pid.number'  => '父级分类ID为数字',
            'courseid.require'  => 'courseid必填',
            'courseid.number' => 'courseid为数字'
            ];
        
        $validate = new Validate($rule,$message);
        $result   = $validate->check($data);
        if(!$result){
            $this->error($validate->getError());
        }else{
            $res =  db('courseunite')->insertGetId($data);
        }
        if($res){
            $this->success('新增成功', '/Course/');
        }else{
            $this->error('新增失败');
        }
	}

	public function shanchu_unite($id)
	{
		// dump($id);die;
		$res = Db::name('courseunite')->where('pid',$id)->select();
		if(empty($res)){
		    $result = Db::name('courseunite')->where('id',$id)->delete();
		    if($result){
		    	$this->success('删除成功');
		    }else{
		    	$this->error('删除失败，请重试');
		    }
			

		}else{
			$this->error('请先删除该单元下的小节课');
		}
	}

	//查看单元/图片信息
	public function see_unite($courseid='')
	{
		// dump($courseid);die;
		//带着id去找该课程的图片/单元信息
		$picture = Db::name('coursepicture')->where('courseid',$courseid)->order('cover','desc')->select();

		$unite = Db::name('courseunite')->where('courseid',$courseid)->where('pid','0')->select();
		// dump($unite);die;
		return view('course/unites',[
				'title1'=>'课程管理',
				'title2'=>'单元管理',
				'title3'=>'图片管理',
				'picture'=>$picture,
				'unite'=>$unite
			]);
		
	}

	//加载添加单元的课页面
	public function add_class($id='')
	{
		$unite = Db::name('courseunite')->where('id',$id)->field('name,courseid,id,level')->find();
		return view('course/class_add',[
				'title'=>'课程管理',
				'content'=>$unite
			]);
	}

	//执行添加课操作
	public function do_class()
	{
		
		//获取表单上传文件 例如上传了001.jpg 
		$file = request()->file('video');  
  		if(empty($file)){
  			$this->error('请上传视频');
  		}
        // var_dump($_FILES);
		// dump($file);die;
		// 移动到框架应用根目录/public/uploads/ 目录下
		$info = $file->validate()->move(ROOT_PATH . 'public' . DS . 'uploads');
		if($info){
			// 成功上传后 获取上传信息  输出 jpg
			// echo $info->getExtension();
			// 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
			$address = $info->getSaveName();
			// 输出 42a79759f284b767dfcb2a0197904287.jpg
			// echo $info->getFilename(); 
		}else{
			//上传失败获取错误信息
			echo $file->getError();
		}

		$data = input('post.');
		$rule =[
                'name'   => 'require|regex:/^[\x{4e00}-\x{9fa5}a-zA-Z0-9]{2,16}$/u'
                ];

        $message  =[
            'name.require' => '小节课必须填',
            'name.regex'     => '小节课为2-16位中文汉字或者字母数字'
            ];
        
        $validate = new Validate($rule,$message);
        $result   = $validate->check($data);

        if(!$result){
            $this->error($validate->getError());
        }else{
            $res = Db::name('courseunite')->insert($data);
        }
		// dump($data);die;
		
		if($res){
			$this->success('添加class成功');
		}else{
			$this->error('添加失败');
		}
	}

	//查看某单元的课
	public function see_class($id='')
	{
		
        $unite = Db::name('courseunite')->where('id',$id)->field('name')->find();
		$row = Db::name('courseunite')->where('pid',$id)->select();
        // dump($row);die;
        return view('course/class',[
        		'title'=>'课程管理',
        		'content'=>$unite['name'].'的课',
        		'row'=>$row
        	]);
	
	}

	public function allquestion()
	{
		$question = Db::name('question')->order('qtime','desc')->paginate(5);
		// dump($question);die;
		return view('course/question',['question'=>$question,'title'=>'课程管理','content'=>'答疑列表']);
	}

	//加载回复页面
	public function reply_que($id)
	{
		return view('course/reply_que',['title'=>'课程管理','content'=>'回复疑问','id'=>$id]);
	}

	//执行回复
	public function reply_do()
	{
		$data = input('post.');
		
		$id = $data['id'];
		$data['rpcontent'] = strip_tags($data['rpcontent']);
		$data['rptime'] = time();
		$data['rpname'] = session('admin.name');
		$data['status'] = 1;
		unset($data['id']);

		$rule =[
                'rpcontent'   => 'require|regex:/^[\x{4e00}-\x{9fa5}a-zA-Z0-9]{2,100}$/u'
                ];

        $message  =[
            'rpcontent.require' => '回复内容必须填',
            'rpcontent.regex'     => '回复内容为2-100位中文汉字或者字母数字'
            ];
        
        $validate = new Validate($rule,$message);
        $result   = $validate->check($data);
        if(!$result){
            $this->error($validate->getError());
        }else{
            $res = Db::name('question')->where('id',$id)->update($data);
        }
		// dump($data);die;
		
		// dump($res);die;
		if($res){
			$this->success('回复成功','/allquestion/');
		}else{
			$this->error('回复失败,请重试');
		}
		
	}

	//查看,某条回复
	public function reply_see($id)
	{
		$res = Db::name('question')->where('id',$id)->find();
		// dump($res);

		return view('course/reply_see',['title'=>'课程管理','content'=>'回复疑问','data'=>$res]);
	}

}